applicationContext-datasource.xml
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
| 속성 | 설 명 | 사용 예 |
|---|---|---|
| isolation | Transaction의 isolation Level. 별도로 정의하지 않으면 DB의 Isolation Level을 따름. | @Transactional(isolation=Isolation.DEFAULT) |
| propagation | 트랜잭션 전파규칙을 정의 , Default=REQURIED | @Transactional(propagation=Propagation.REQUIRED) |
| readOnly | 해당 Transaction을 읽기 전용 모드로 처리 (Default = false) | @Transactional(readOnly = true) |
| rollbackFor | 정의된 Exception에 대해서는 rollback을 수행 | @Transactional(rollbackFor=Exception.class) |
| noRollbackFor | 정의된 Exception에 대해서는 rollback을 수행하지 않음. | @Transactional(noRollbackFor=Exception.class) |
| timeout | 지정한 시간 내에 해당 메소드 수행이 완료되지 않은 경우 rollback 수행. -1일 경우 no timeout (Default = -1) | @Transactional(timeout=10) |
| 속성 | 설 명 |
|---|---|
| ISOLATION_DEFAULT | 데이터베이스에 의존 |
| ISOLATION_READ_UNCOMMITTED | 격리레벨중 가장 낮은 격리 레벨이다. 다른 Commit되지 않은 트랜잭션에 의해 변경된 데이터를 볼 수 있다. 거의 트랜잭션의 기능을 수행하지 않는다. |
| ISOLATION_READ_COMMITTED | 데이터베이스에서 디폴트로 지원하는 격리 레벨이다. 다른 트랜잭션에 의해 Commit되지 않은 데이터는 다른 트랜잭션에서 볼 수 없다. 일반적 으로 가장 많이 사용한다. |
| ISOLATION_REPEATABLE_READ | 다른 트랜잭션이 새로운 데이터를 입력했다면 볼 수 있다. 트랜잭션이 완료 될때까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리므로 다른 사용자는 그 영역에 해당되는 데이터에대한 수정이 불가능하다 |
| ISOLATION_SERIALIZABLE | 하나의 트랜잭션이 완료된 후에 다른 트랜잭션이 실행하는 것처럼 지원한다. 동일한 데이터에 대해서 동시에 두 개 이상의 트랜잭션이 수행 될 수 없다. |
| 속성 | 설 명 |
|---|---|
| PROPAGATION_REQUIRED | 기존의 트랜잭션이 존재하면 그 트랜잭션을 지원, 없다면 새로운 트랜잭션을 시작. 가장 자주 사용되는 옵션 |
| PROPAGATION_SUPPORTS | 기존의 트랜잭션이 존재하면 그 트랜잭션을 지원, 없다면 비-트랜잭션 상태로 수행 |
| PROPAGATION_MANDATORY | 반드시 Transaction 내에서 메소드가 실행되어야 한다. 없으면 예외발생 |
| PROPAGATION_REQUIRES_NEW | 언제나 새로운 트랜잭션을 수행, 이미 활성화된 트랜잭션이 있다면 일시정지 한다. |
| PROPAGATION_NOT_SUPPORTED | 새로운 Transaction을 필요로 하지는 않지만, 기존의 Transaction이 있는 경우에는 Transaction 내에서 메소드를 실행한다. |
| PROPAGATION_NEVER | Manatory와 반대로 Transaction 없이 실행되어야 하며 Transaction이 있으면 예외를 발생시킨다 |
| PROPAGATION_NESTED | 현재의 트랜잭션이 존재하면 중첩된 트랜잭션내에서실 행, 없으면 REQUIRED 처럼 동작 |